﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Common;
using System.Data;
using com.byt.webcore;
using com.byt.suce.db.mapper;
using MYLSOFT.JsonSimple;
using com.byt.webcore.utils;
using System.IO;
using System.Xml;
using com.byt.suce.db.dao;
using com.byt.suce.db.factory;

namespace com.byt.gestor.service
{
    public class Recepcionar
    {

        public Recepcionar()
        {
            Connection gsuce = Helper.getConnection("suce");
            Connection vuce = Helper.getConnection("integrador");

            IPkgGestorServicio DAO = PkgGestorServicioFactory.create();

            JSONObject obj = null;
            // Leer los pendientes
            /*
             * se agrego a la vista vw_gestor_pendiente una subconsulta para que 
             * traiga el ID_CDA, sólo cuando el tipo de mensaje sea N6, N23 y N66
             */
            PkgGestorServicio.PendienteGetlistParam param = DAO.pendienteGetlist(vuce, obj);
            JSONArray ja = Utils.getJSONArrayObject(param.CurOut);
            param.CurOut.Close();

            // Ingresar a SUCE
            StringBuilder sb = new StringBuilder();

            foreach (JSONObject jo in ja)
            {
                try
                {
                    gsuce.BeginTransaction(IsolationLevel.ReadCommitted);
                    vuce.BeginTransaction(IsolationLevel.ReadCommitted);


                    if (jo["idactividad"].ToString().Equals("N18"))
                        RegistrarEbxml_N18(gsuce, jo, (byte[])jo["ebxml"]);
                    else if (jo["idactividad"].ToString().Equals("N34"))
                        RegistrarEbxml_N34(gsuce, jo, (byte[])jo["ebxml"]);
                    else
                    {
                        // Guardar el EBXML
                        RegistrarEbxml(gsuce, jo, (byte[])jo["ebxml"]);
                    }

                    // Ingresar el flujo
                    PkgWorkflow.InboxInsertParam ins = PkgWorkflowFactory.create().newInboxInsertParam(jo);
                    ins.Idactividad = ins.Idactividad;
                    /*
                     * se modifico el stored pues al hacer insert daba error,
                     * porque se asumia que el campo ID_Q de la tabla GESTOR_Q
                     * era un campo IDENTITY, sin embargo no lo era, por lo tanto
                     * se agrego al stored el calculo del campo ID_Q ya que no se 
                     * podia actualizar la tabla sin eliminarla y volver a crearla
                     */
                    PkgWorkflowFactory.create().inboxInsert(gsuce, ins);
/*
                    gsuce.Rollback();
                    vuce.Rollback();
                    */
                    gsuce.Commit();
                    vuce.Commit();
                    
                    if (sb.Length > 0)
                        sb.Append(",");

                    if (jo["gestoriddoc"] != null)
                        sb.Append("DOC" + jo["gestoriddoc"]);
                    else if (jo["gestoridcda"] != null)
                        sb.Append("CDA" + jo["gestoridcda"]);   
                }
                catch (Exception ex)
                {
                    if (gsuce != null)
                        gsuce.Rollback();
                    if (vuce != null)
                        vuce.Rollback();

                    SUCE.SERVICE.Program.Warning(ex);
                }

            }

            // Marcar como transferido
            if (sb.Length > 0)
            {
                gsuce.BeginTransaction(IsolationLevel.ReadCommitted);
                vuce.BeginTransaction(IsolationLevel.ReadCommitted);

                PkgGestorServicio.PendienteMarcarTransferidoParam trans = DAO.newPendienteMarcarTransferidoParam();
                trans.Iddocs = sb.ToString();
                DAO.pendienteMarcarTransferido(vuce, trans);

                gsuce.Commit();
                vuce.Commit();
            }

            gsuce.Close();
            vuce.Close();

        }

        private XmlDocument ParseEBXML(string root, byte[] ebxml)
        {
            Encoding enc = Encoding.GetEncoding("ISO-8859-1");
            string ebxmlText = enc.GetString(ebxml);

            //MemoryStream ms = new MemoryStream(ebxml);
            //StreamReader sr = new StreamReader(ms);
            //StringBuilder sb = new StringBuilder(sr.ReadToEnd());
            StringBuilder sb = new StringBuilder(ebxmlText);
            //sr.Close();

            // Formatear el EBXML
            sb.Replace("vct:", "");
            sb.Replace("vram:", "");
            sb.Replace(":ct", "");
            string s = sb.ToString();
            int pos = s.IndexOf("<" + root);
            int pos2 = s.IndexOf(">", pos + 1);
            s = s.Remove(pos + (root.Length + 1), pos2 - pos - (root.Length + 1));
            s = s.Replace("suce:", "");
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(s);

            return xml;
        }

        private void RegistrarEbxml(Connection gsuce, JSONObject transaccion, byte[] ebxml)
        {
            if (ebxml == null || ebxml.Length == 0)
                return;

            XmlDocument xml = ParseEBXML("suce", ebxml);
            JSONObject joxml = null;

            if ("DGS005".Equals(transaccion["codformato"]))
                joxml=null;
                //joxml = VuceToGestor.ProcesarDGS005(xml);
            //else if ("DGS006".Equals(transaccion["codformato"]))
                //joxml = VuceToGestor.ProcesarDGS006(xml);
            else if ("DGS008".Equals(transaccion["codformato"]))
                joxml = VuceToGestor.ProcesarDGS008(xml);
            else if ("DGS009".Equals(transaccion["codformato"]))// AGREGADO POR CESAR BOCANEGRA
                joxml = VuceToGestor.ProcesarDGS009(xml);
            else if ("DGS002".Equals(transaccion["codformato"]))// AGREGADO POR CESAR BOCANEGRA
                joxml = VuceToGestor.ProcesarDGS002(xml);
            else if ("DGS003".Equals(transaccion["codformato"]))// AGREGADO POR CESAR BOCANEGRA
                joxml = VuceToGestor.ProcesarDGS003(xml);
            else if ("DGS004".Equals(transaccion["codformato"]))// AGREGADO POR CESAR BOCANEGRA
                joxml = VuceToGestor.ProcesarDGS004(xml);
            else
                joxml = null;
            
               
            //
            // LLamar a los Stored Procedures
            //
            IPkgEbxml eb = PkgEbxmlFactory.create();
            JSONArray ja;
            JSONObject jo;


            // Solicitante
            //jo = (JSONObject)((JSONObject)joxml["DocumentHeader"])["PetitionerTradeParty"];            
            jo = (JSONObject)joxml["DocumentHeader"];

            PkgEbxml.SolicitanteInsertParam persona = eb.solicitanteInsert(gsuce, jo);


            //PkgEbxml.SolicitanteCambioInsertParam personacambio = eb.solicitantecambioInsert(gsuce, jo); //AUNQUE NO HAYA NADA INSERTA REGISTROS

            //persona.Solidpersona
            //persona.Repidpersona

            // Laboratorio / Agente de aduanas
            
            PkgEbxml.LaboratorioInsertParam laboratorio = eb.laboratorioInsert(gsuce, jo);
            //laboratorio.Perlabidpersona
            //laboratorio.Labidpersona


            // Empresa
            jo = (JSONObject)joxml["FactoryLocation"];
            
            PkgEbxml.EmpresaExtranjeraUpdateParam empresa = null;
            if (jo != null)
            {
                empresa = eb.empresaExtranjeraUpdate(gsuce, jo);
            }

            jo = (JSONObject)joxml["ChangedPetitioner"];

            PkgEbxml.SolicitanteCambioInsertParam personacambio = null;

            if (jo != null)
            {
                personacambio = eb.solicitantecambioInsert(gsuce, jo); //AUNQUE NO HAYA NADA INSERTA REGISTROS
            }

            // SanitaryRegisterHolderXX
            
            jo = (JSONObject)joxml["SanitaryRegisterHolderXX"];
            
            if (jo != null)
            {
                empresa = eb.empresaExtranjeraIns(gsuce, jo);
            }
             

            //MODIF CESAR BOCANEGRA
            jo = (JSONObject)joxml["EstablishmentLocation"];
            PkgEbxml.EstablecimientoInsertParam empresa1 = null;
            if (jo != null)
            {
                empresa1 = eb.EstablecimientoInsert(gsuce, jo);
            }            
                       
            //empresa.Idpersona
 
            // Almacen
            PkgEbxml.AlmacenInsertParam almacen = null;
            if ("DGS005".Equals(transaccion["codformato"]) || "DGS008".Equals(transaccion["codformato"]) || "DGS009".Equals(transaccion["codformato"]) || "DGS003".Equals(transaccion["codformato"]))
            {
                jo = (JSONObject)joxml["StorageLocation"];
                almacen = eb.almacenInsert(gsuce,  jo);
                //almacen.Almidpersona
                //almacen.Repidpersona
            }

            //TAG PRODUCTDESTINATION CESAR BOCANEGRA
            jo = (JSONObject)joxml["ProductDestination"];
            PkgEbxml.DestinoProdInsertParam destino = null;
            if (jo != null)
            {
                destino = eb.DestinoProdInsert(gsuce, jo);
            }
            


            // Solicitud
            PkgEbxml.SolicitudInsertParam solicitud = eb.newSolicitudInsertParam();
            solicitud.Idsolicitud = Utils.parseInteger(transaccion["idsolicitud"]);
            solicitud.Tipodoc = (string)transaccion["codtipodoc"];
            solicitud.Numedoc = (string)transaccion["docnumero"];
            solicitud.Codiformato = (string)transaccion["codformato"];
            solicitud.Idperssoli = persona.Solidpersona;
            solicitud.Idpersrepr = persona.Repidpersona;

            solicitud.Chgsoli = personacambio.Cambidpersona;
            solicitud.Chgrepresoli = personacambio.Cambidpersonarepre;

            //solicitud.Idpersrepr = persona.Repidpersona;
            //solicitud.Idemprext = empresa == null ? empresa1.Codestablecimiento : empresa.Idpersona;

            if (empresa != null)
                solicitud.Idemprext = empresa.Idpersona;
            else
                solicitud.Idemprext = null;



            //MODIFICADO POR CESAR BOCANEGRA

            if (almacen != null)
                solicitud.Idpersalma = almacen.Almidpersona;
            else if (empresa != null)
                solicitud.Idpersalma = empresa.Idpersona;
            //else if (destino != null)
            //    solicitud.Idpersalma = destino.OUTcod_exped1; //codigo expedidor
            else
                solicitud.Idpersalma = null;


            if (almacen != null)
                solicitud.Idpersrepralma = almacen.Repidpersona;
            else if (empresa != null)
                solicitud.Idpersrepralma = empresa.Repidpersona;
            //else if (destino != null)
            //    solicitud.Idpersrepralma = destino.OUTcod_desti1; //codigo destinatario
            else
                solicitud.Idpersrepralma = null;

            if (empresa1 != null)
                solicitud.Id_estableci = empresa1.Codestablecimiento;
            else
                solicitud.Id_estableci = null;

           
            //RECIBE LOS PARAMETROS OUT DE DESTINO Y LOS COLOCA EN SOLICITUD
            if (destino != null)
            {
                solicitud.Id_expedidor = destino.OUTcod_exped1;
                solicitud.Id_destina = destino.OUTcod_desti1;
                solicitud.Sol_destino = destino.Soldesti;
            }
            else
            {
                solicitud.Id_expedidor = null;
                solicitud.Id_destina = null;
                solicitud.Sol_destino = null;
            }
            //solicitud.Idpersalma = almacen == null ? empresa.Idpersona : almacen.Almidpersona; //ERROR
            //solicitud.Idpersrepralma = almacen == null ? empresa.Repidpersona : almacen.Repidpersona;
            
           
   
            
            if (laboratorio.Labidpersona == 0)
                solicitud.Idperslab = null;
            else
                solicitud.Idperslab = laboratorio.Labidpersona;
            if (laboratorio.Perlabidpersona == 0)
                solicitud.Idpersperlab = null;
            else
                solicitud.Idpersperlab = laboratorio.Perlabidpersona;
            solicitud.Fechrecepcion = Utils.parseDate((string)transaccion["fechregistro"]);
            eb.solicitudInsert(gsuce, solicitud); //INGRESA SOLICITUD
            //solicitud.Idversion
            transaccion.Add("idversion", solicitud.Idversion);

           
            
            //SpecificInformation
            
            PkgEbxml.SolicitudEspecificacionInsertParam especificacion = eb.newSolicitudEspecificacionInsertParam();

            //modificado CESAR BOCANEGRA 27/02/2013

            if (joxml["SpecificInformation"] is JSONObject)
            {
                jo = (JSONObject)joxml["SpecificInformation"];
                if (jo != null)
                {
                    if ((string)jo["reinscripcion"] == "S")
                    {

                        especificacion.Idsolicitud = solicitud.Idsolicitud;
                        especificacion.Idversion = solicitud.Idversion;
                        especificacion.Reinscripcion = (string)jo["reinscripcion"];
                        especificacion.Drano = (string)jo["drano"];
                        especificacion.Drnro = (string)jo["drnro"];
                        especificacion.Suceano = (string)jo["suceano"];
                        especificacion.Sucenro = (string)jo["sucenro"];
                        especificacion.Certificado = (string)jo["certificado"];
                        especificacion.Expediente = (string)jo["expediente"];
                        eb.solicitudespecificacionInsert(gsuce, especificacion);
                    }
                    else
                    {

                        especificacion.Idsolicitud = solicitud.Idsolicitud;
                        especificacion.Idversion = solicitud.Idversion;
                        especificacion.Reinscripcion = (string)jo["reinscripcion"];
                        especificacion.Drano = (string)jo["drano"];
                        especificacion.Drnro = (string)jo["drnro"];
                        especificacion.Suceano = (string)jo["suceano"];
                        especificacion.Sucenro = (string)jo["sucenro"];
                        especificacion.Certificado = (string)jo["certificado"];
                        especificacion.Expediente = (string)jo["expediente"];

                        especificacion.Tcambempresa = (string)jo["tcambempresa"];
                        especificacion.Tcambrepresentante = (string)jo["tcambrepresentante"];
                        especificacion.Tcambalmacenamiento = (string)jo["tcambalmacenamiento"] ;
                        especificacion.Tcambdenominacion = (string)jo["tcambdenominacion"];
                        especificacion.Tcambenvase = (string)jo["tcambenvase"];
                        especificacion.Tcambformulacion = (string)jo["tcambformulacion"];
                        especificacion.Tcambcancelacion = (string)jo["tcambcancelacion"];
                        especificacion.Idioma = null;


                    }
                }

                eb.solicitudespecificacionInsert(gsuce, especificacion);

            }
            else if (joxml["SpecificInformation"] is JSONArray)
            {
                especificacion.Idsolicitud = solicitud.Idsolicitud;
                especificacion.Idversion = solicitud.Idversion;
                especificacion.Reinscripcion = null;
                especificacion.Drano = null;
                especificacion.Drnro = null;
                especificacion.Suceano = null;
                especificacion.Sucenro = null;
                especificacion.Certificado = null;
                especificacion.Expediente = null;

                especificacion.Tcambempresa = null;
                especificacion.Tcambrepresentante = null;
                especificacion.Tcambalmacenamiento = null;
                especificacion.Tcambdenominacion = null;
                especificacion.Tcambenvase = null;
                especificacion.Tcambformulacion = null;
                especificacion.Tcambcancelacion = null;
                //aqui debe de ir un bucle que una los idiomas
                //string cadena = "";
                ja = (JSONArray)joxml["SpecificInformation"];
                if (ja != null)                
                    especificacion.Idioma = ja;                
                else
                    especificacion.Idioma = null;
                
                eb.solicitudespecificacionInsert(gsuce, especificacion);
            }

            //FIN DE LA MODIFICACION
            
           /* jo = (JSONObject)joxml["SpecificInformation"];
            if (jo != null)
            {
                if (jo.Count > 1)
                {

                    if ((string)jo["reinscripcion"] == "S")
                    {

                        especificacion.Idsolicitud = solicitud.Idsolicitud;
                        especificacion.Idversion = solicitud.Idversion;
                        especificacion.Reinscripcion = (string)jo["reinscripcion"];
                        especificacion.Drano = (string)jo["drano"];
                        especificacion.Drnro = (string)jo["drnro"];
                        especificacion.Suceano = (string)jo["suceano"];
                        especificacion.Sucenro = (string)jo["sucenro"];
                        especificacion.Certificado = (string)jo["certificado"];
                        especificacion.Expediente = (string)jo["expediente"];
                        eb.solicitudespecificacionInsert(gsuce, especificacion);
                    }
                    else
                    {

                        especificacion.Idsolicitud = solicitud.Idsolicitud;
                        especificacion.Idversion = solicitud.Idversion;
                        especificacion.Reinscripcion = (string)jo["reinscripcion"];
                        especificacion.Drano = (string)jo["drano"];
                        especificacion.Drnro = (string)jo["drnro"];
                        especificacion.Suceano = (string)jo["suceano"];
                        especificacion.Sucenro = (string)jo["sucenro"];
                        especificacion.Certificado = (string)jo["certificado"];
                        especificacion.Expediente = (string)jo["expediente"];

                        especificacion.Tcambempresa = (string)jo["tcambempresa"];
                        especificacion.Tcambrepresentante = (string)jo["tcambrepresentante"];
                        especificacion.Tcambalmacenamiento = (string)jo["tcambalmacenamiento"];
                        especificacion.Tcambdenominacion = (string)jo["tcambdenominacion"];
                        especificacion.Tcambenvase = (string)jo["tcambenvase"];
                        especificacion.Tcambformulacion = (string)jo["tcambformulacion"];
                        especificacion.Tcambcancelacion = (string)jo["tcambcancelacion"];
                        especificacion.Idioma = null;

                        
                    }
                }
                else
                {
                    especificacion.Idsolicitud = solicitud.Idsolicitud;
                    especificacion.Idversion = solicitud.Idversion;
                    especificacion.Reinscripcion = null;
                    especificacion.Drano = null;
                    especificacion.Drnro = null;
                    especificacion.Suceano = null;
                    especificacion.Sucenro = null;
                    especificacion.Certificado = null;
                    especificacion.Expediente = null;

                    especificacion.Tcambempresa = null;
                    especificacion.Tcambrepresentante = null;
                    especificacion.Tcambalmacenamiento = null;
                    especificacion.Tcambdenominacion = null;
                    especificacion.Tcambenvase = null;
                    especificacion.Tcambformulacion = null;
                    especificacion.Tcambcancelacion = null;
                    //aqui debe de ir un bucle que una los idiomas

                    ja=(JSONArray)jo["idioma"];
                    if (ja != null)
                    {
                        foreach (JSONObject idiom in ja)
                        {
                            
                        }
                    }

                    //especificacion.Idioma = (string)jo["idioma"]; //modificado por CESAR BOCANEGRA
                }

                eb.solicitudespecificacionInsert(gsuce, especificacion);
            }
            */
            //ok hasta aqui

            //fin de SpecificInformation


            PkgEbxml.LaboratorioCertificadoInsertParam laboratoriocertificado = eb.newLaboratorioCertificadoInsertParam();
            ja = (JSONArray)joxml["LaboratoryLocation"];
            if (ja != null ){
                foreach (JSONObject labo in ja)
                {
                    JSONArray ja_l;
                    ja_l = (JSONArray)labo["TradeParty"];
                    laboratoriocertificado.setValuesFromMap((JSONObject)ja_l[0]);
                    laboratoriocertificado.Idsolicitud = solicitud.Idsolicitud;
                    laboratoriocertificado.Idversion = solicitud.Idversion;
                
                    //laboratoriocertificado.IDLaboratorioAcreditadoTipo = labo["TradeParty"];// (int?)jo["idLaboratorioacreditadotipo"];
                    //laboratoriocertificado.IDIDLaboratorioAcreditado = (int?)jo["ididlaboratorioAcreditado"];
                    //laboratoriocertificado.Nombre = (string)jo["nombre"];
                    eb.laboratoriocertificadoInsert(gsuce, laboratoriocertificado);
                }
            }

            // Adjuntos
            PkgEbxml.AdjuntoInsertParam adjunto = eb.newAdjuntoInsertParam();
            ja = (JSONArray)joxml["AttachedDocument"];
            if (ja != null)
            {
                foreach (JSONObject atach in ja)
                {
                    adjunto.setValuesFromMap(atach);
                    adjunto.Idsolicitud = solicitud.Idsolicitud;
                    adjunto.Idversion = solicitud.Idversion;
                    eb.adjuntoInsert(gsuce, adjunto);
                }
            }

            // Productos

            /* MODIFICADO POR CESAR BOCANEGRA */

            //SanitaryRegisterHolder


            PkgEbxml.TitularCertificadoParam titucertificado = eb.newTitularCertificadoParam();
            jo = (JSONObject)joxml["SanitaryRegisterHolder"];
            if (jo != null)
            {                
                titucertificado.setValuesFromMap(jo);
                titucertificado.Idsolicitud = solicitud.Idsolicitud;
                titucertificado.Idversion = solicitud.Idversion;
                titucertificado.Jsonproductos = (JSONArray)jo["productos"];
                eb.TitularCertificado(gsuce, titucertificado);
                
            }




            PkgEbxml.ProductoInsertParam producto = eb.newProductoInsertParam();
            PkgEbxml.ComposicionInsertParam composicion = eb.newComposicionInsertParam();
            PkgEbxml.AditivoInsertParam aditivo = eb.newAditivoInsertParam();
            PkgEbxml.EnvaseInsertParam envase = eb.newEnvaseInsertParam();

            //DGS004
            //SanitaryRegisterHolderXX
            JSONArray japroducts = (JSONArray)joxml["SanitaryRegister"];
            if (japroducts != null)
            {
                foreach (JSONObject prod in japroducts)
                {
                    producto.setValuesFromMap(prod);
                    producto.Idsolicitud = solicitud.Idsolicitud;
                    producto.Idversion = solicitud.Idversion;
                    eb.ProductoInsertDet(gsuce, producto);
                    
                }
            }


            /* FIN DE LA MODIFICACION */

            

            JSONArray jaProducts = (JSONArray)joxml["FoodIndustrialProduct"];

            if (jaProducts != null)
            {

                foreach (JSONObject prod in jaProducts)
                {
                    // Insertar producto
                    producto.setValuesFromMap(prod);
                    producto.Idsolicitud = solicitud.Idsolicitud;
                    producto.Idversion = solicitud.Idversion;
                    eb.productoInsert(gsuce, producto);

                    // Composicion
                    ja = (JSONArray)prod["Composition"];
                    foreach (JSONObject comp in ja)
                    {
                        composicion.setValuesFromMap(comp);
                        composicion.Idproducto = producto.Idproducto;
                        eb.composicionInsert(gsuce, composicion);
                    }

                    // Aditivo
                    ja = (JSONArray)prod["AdditiveProduct"];
                    foreach (JSONObject adit in ja)
                    {
                        aditivo.setValuesFromMap(adit);
                        aditivo.Idproducto = producto.Idproducto;
                        eb.aditivoInsert(gsuce, aditivo);
                    }

                    // Envase
                    ja = (JSONArray)prod["LogisticsPackage"];
                    foreach (JSONObject env in ja)
                    {
                        envase.setValuesFromMap(env);
                        envase.Idproducto = producto.Idproducto;
                        eb.envaseInsert(gsuce, envase);
                    }

                }
            }

            jaProducts = (JSONArray)joxml["FoodDrinkProduct"];
            if (jaProducts != null)
            {
                int item = 0;
                foreach (JSONObject prod in jaProducts)
                {
                    //Insertar Producto
                    item++;

                    producto.setValuesFromMap(prod);
                    producto.Detalle = (JSONArray)prod["Detalle"];
                    producto.Idsolicitud = solicitud.Idsolicitud;
                    producto.Idversion = solicitud.Idversion;
                    producto.Numeitem = item;
                    //eb.productoInsert(gsuce, producto);
                    eb.productoInsertDetalle(gsuce, producto);

                }
            }


        }


        //LASCLASC
        private void RegistrarEbxml_N18(Connection gsuce, JSONObject transaccion, byte[] ebxml)
        {
            if (ebxml == null || ebxml.Length == 0)
                return;

            XmlDocument xml = ParseEBXML("mod", ebxml);
            JSONObject joxml = VuceToGestor.ProcesarDGS005(xml);

            PkgSubsanacion.RegistrarrespuestaParam param = PkgSubsanacionFactory.create().newRegistrarrespuestaParam();
            param.Idnotificacion = Utils.parseInteger(transaccion["gestoridcda"]);
            param.Fecha = Utils.parseDate((string)transaccion["fechregistro"]);
            param.Respuesta = (string)((JSONObject)joxml["ExchangeDocument"])["respuesta"];
            param.Idsolicitud = Utils.parseInteger(transaccion["idsolicitud"]);
            param.Numorden = (string)transaccion["docnumero"];
            PkgSubsanacionFactory.create().registrarrespuesta(gsuce, param);

        }


        private void RegistrarEbxml_N34(Connection gsuce, JSONObject transaccion, byte[] ebxml)
        {
            if (ebxml == null || ebxml.Length == 0)
                return;

            XmlDocument xml = ParseEBXML("suce", ebxml);
            JSONObject joxml = VuceToGestor.ProcesarDGS005(xml);
            
            PkgSubsanacion.RegistrarrespuestaParam param = PkgSubsanacionFactory.create().newRegistrarrespuestaParam();
            param.Idnotificacion = Utils.parseInteger(transaccion["gestoridcda"]);
            param.Fecha = Utils.parseDate((string)transaccion["fechregistro"]);
            param.Respuesta = (string)((JSONObject)joxml["ExchangeDocument"])["respuesta"];
            param.Idsolicitud = Utils.parseInteger(transaccion["idsolicitud"]);
            PkgSubsanacionFactory.create().registrarrespuesta(gsuce, param);

        }


    }
}
